// 微信登录注册管理工具
import { API } from './api.js'
import { checkLoginStatus, clearLoginStatus } from './miniprogram.js'

/**
 * 微信登录注册管理类
 */
class AuthManager {
  /**
   * 获取微信个人信息
   * @returns {Promise<Object>} 用户信息
   */
  getUserInfo() {
    return new Promise((resolve, reject) => {
      uni.getUserProfile({
        desc: '获取个人信息用于完善用户资料',
        success: (res) => {
          resolve(res.userInfo)
        },
        fail: (err) => {
          console.error('获取用户信息失败:', err)
          reject(err)
        }
      })
    })
  }

  /**
   * 获取微信登录js_code
   * @returns {Promise<string>} js_code
   */
  getJsCode() {
    return new Promise((resolve, reject) => {
      uni.login({
        success: (res) => {
          if (res.code) {
            resolve(res.code)
          } else {
            reject(new Error('获取js_code失败'))
          }
        },
        fail: (err) => {
          console.error('微信登录失败:', err)
          reject(err)
        }
      })
    })
  }

  /**
   * 微信登录方法（优化版）
   * @returns {Promise<Object>} 登录结果
   */
  async wxLogin() {
    try {
      // 1. 获取js_code
      const jsCode = await this.getJsCode()
      const userInfo = await this.getUserInfo()
      // 2. 如果需要用户信息，则获取用户信息
      try {
          userInfo = await this.getUserInfo()
        } catch (error) {
          console.warn('用户拒绝授权获取个人信息:', error)
          // 用户拒绝授权，继续登录流程但不包含用户信息
      }   

      // 3. 构建登录数据
      const loginData = {
        code: jsCode,
        nickName: userInfo.nickName,
        avatarUrl: userInfo.avatarUrl,
        encryptedData: userInfo.encryptedData,
        iv: userInfo.iv,
        sessionKey: userInfo.signature,
      }
      console.log("loginData--->", loginData);
      return;
      // 4. 调用后端登录接口
      const result = await API.auth.wxLogin(loginData)

      // 5. 保存登录信息
      if (result.token && result.userInfo) {
        uni.setStorageSync('token', result.token)
        uni.setStorageSync('userInfo', result.userInfo)

        // 更新状态
        this.isLoggedIn = true
        this.userInfo = result.userInfo
        this.token = result.token
        this.hasPhone = !!result.userInfo.phone

        return {
          success: true,
          userInfo: result.userInfo,
          token: result.token,
          needBindPhone: !result.userInfo.phone
        }
      } else {
        throw new Error('登录响应数据格式错误')
      }
    } catch (error) {
      console.error('微信登录失败:', error)
      throw error
    }
  }
  /**
   * 退出登录
   */
  logout() {
    clearLoginStatus()
    this.isLoggedIn = false
    this.userInfo = null
    this.token = null
    this.hasPhone = false
  }

  /**
   * 检查登录状态并自动处理
   * @returns {Object} 登录状态信息
   */
  checkAndHandleLogin() {
    const status = this.init()
  }
}

// 创建单例实例
const authManager = new AuthManager()

// 导出实例和类
export default authManager
export { AuthManager } 